home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / shell / igo / gosource / mdjudge.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  5.6 KB  |  201 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include "igo.h"
  9. #include "banx.h"
  10. #include "kiffile.h"
  11. #include "title.h"
  12.  
  13. extern int deskTopId;
  14. extern int ban_windowId;
  15. extern int note_windowId;
  16. extern int menuBarId;
  17.  
  18.  
  19. int    judge_dialogId = -1 ;
  20. int    judge_backbuttonId = -1 ;
  21. int    judge_buttonId[2] = -1 ;
  22. int    judge_messageId[4] = -1 ;
  23.  
  24. int judge_set()
  25. {
  26. int b_territory_number, w_territory_number;
  27.  
  28.     title_judge_on();
  29.     kifu_judge(&b_territory_number, &w_territory_number);
  30.     judge_do_set(b_territory_number, w_territory_number);
  31.  
  32.     MMI_SendMessage( ban_windowId, MM_DETACH, 0);
  33.     MMI_SendMessage( note_windowId, MM_DETACH, 0);
  34.     MMI_SendMessage( menuBarId, MM_DETACH, 0);
  35.  
  36.     /*    オブジェクトをダイアログに取り付ける    */
  37.     MMI_SendMessage( ban_windowId , MM_ATTACH , 1 , deskTopId ) ;
  38.     MMI_SendMessage( judge_dialogId , MM_ATTACH , 1 , deskTopId ) ;
  39.     
  40.     /*    オブジェクトを表示する    */
  41.     MMI_SendMessage( ban_windowId, MM_SHOW, 0 ) ; 
  42.     MMI_SendMessage( judge_dialogId, MM_SHOW, 0 ) ; 
  43.  
  44.     MMI_ExecSystem();
  45.  
  46.     return NOERR;
  47.  
  48.  
  49. }
  50.  
  51. /*    initDataMIJUDGE:judeg_buttonId[0]:MJ_DBUTTONL40の呼び出し関数    */
  52. int    judge_end(kobj, messId, argc, pev, trigger)
  53. int        kobj ;
  54. int        messId ;
  55. int        argc ;
  56. EVENT    *pev ;
  57. int        trigger ;
  58. {
  59.     title_judge_off();
  60.     
  61.     /*    judge_dialogIdで示されるオブジェクトを消す        */
  62.     MMI_SendMessage( judge_dialogId, MM_ERASE , 0 ) ;
  63.     /*    オブジェクトをダイアログから取り外す    */
  64.     MMI_SendMessage( judge_dialogId, MM_DETACH , 0 ) ;
  65.     MMI_SendMessage( note_windowId, MM_DETACH , 0 ) ;
  66.  
  67.     MMI_SendMessage( menuBarId , MM_ATTACH , 1 , deskTopId ) ;
  68.     MMI_SendMessage( note_windowId , MM_ATTACH , 1 , deskTopId ) ;
  69.     MMI_SendMessage( ban_windowId , MM_ATTACH , 1 , deskTopId ) ;
  70.  
  71.     retunrInitMenuFunc();
  72.     comment_dispFunc();
  73.  
  74.     MMI_SetHaltFlag(TRUE);
  75.     
  76.     return NOERR ;
  77. }
  78.  
  79. int judge_do_set(int b_territory_number, int w_territory_number)
  80. {
  81. int ban_number, kekka, w_num;
  82. int komi_id, komi_number, hanmoku_id;
  83. char kachi_chr[5];
  84. static char judge_message[4][17];
  85.  
  86.     sprintf(judge_message[0], "黒  %4d目%6s", b_territory_number, " ");
  87.     MMI_SendMessage( judge_messageId[0], MM_SETMSG, 1, judge_message[0]);
  88.     sprintf(judge_message[1], "白  %4d目%6s", w_territory_number, " ");
  89.     MMI_SendMessage( judge_messageId[1], MM_SETMSG, 1, judge_message[1]);
  90.     if((ban_number=(b_territory_number-w_territory_number))<0){
  91.         ban_number*=(-1);
  92.     }
  93.     sprintf(judge_message[2], "盤面%4d目%6s", ban_number, " ");
  94.     MMI_SendMessage( judge_messageId[2], MM_SETMSG, 1, judge_message[2]);
  95.     
  96.     title_komiread( &komi_id, &komi_number, &hanmoku_id);
  97.     switch (komi_id){
  98.         case 0:{
  99.             if(hanmoku_id==0){
  100.                 kekka=2*(b_territory_number-w_territory_number-komi_number)-1;
  101.             }else{
  102.                 kekka=2*(b_territory_number-w_territory_number-komi_number);
  103.             }
  104.             if(kekka>0){
  105.                 strcpy(kachi_chr, "黒");
  106.             }else if(kekka<0){
  107.                 strcpy(kachi_chr, "白");
  108.                 kekka*=(-1);
  109.             }
  110.             break;
  111.         }
  112.         case 1:{
  113.             if(hanmoku_id==0){
  114.                 kekka=2*(w_territory_number-b_territory_number-komi_number)-1;
  115.             }else{
  116.                 kekka=2*(w_territory_number-b_territory_number-komi_number);
  117.             }
  118.             if(kekka>0){
  119.                 strcpy(kachi_chr, "白");
  120.             }else if(kekka<0){
  121.                 strcpy(kachi_chr, "黒");
  122.                 kekka*=(-1);
  123.             }
  124.             break;
  125.         }
  126.         case 2:{
  127.             kekka=2*(b_territory_number-w_territory_number);
  128.             if(kekka>0){
  129.                 strcpy(kachi_chr, "黒");
  130.             }else if(kekka<0){
  131.                 strcpy(kachi_chr, "白");
  132.                 kekka*=(-1);
  133.             }
  134.             break;
  135.         }
  136.     }
  137.     if(kekka==0){
  138.         sprintf(judge_message[3], "%-4s", "ジゴ");
  139.     }else if(kekka==1){
  140.         sprintf(judge_message[3], "%-4s半目勝ち", kachi_chr);
  141.     }else if((w_num=kekka%2)==1){
  142.         sprintf(judge_message[3], "%-4s%4d目半勝ち", kachi_chr, kekka/2);
  143.     }else{
  144.         sprintf(judge_message[3], "%-4s%4d目勝ち", kachi_chr, kekka/2);
  145.     }
  146.     MMI_SendMessage( judge_messageId[3], MM_SETMSG, 1, judge_message[3]);
  147.  
  148.     return NOERR;
  149.  
  150. }
  151.  
  152. int judge_ban_disp()
  153. {
  154. WINCTRL *pctrl;
  155. WINCLIP  *pwclp ; 
  156. WINCLIP  *pstackVisible ; 
  157. WINCLIP  *pstackClip ;
  158. HYPER    hyp ;
  159. FRAME    oFr, sFr, cFr ;
  160. POINT    origin, dspOrigin ;
  161.     
  162.     /* 原点移動                                       */
  163.     origin.y = origin.x = 0 ; 
  164.     MG_PushOrigin(&origin, &dspOrigin) ; 
  165.     /* MMI_Openで指定したサイズで設定                */
  166.     MMI_GetControl(&pctrl) ;
  167.     pwclp = WIN_getClipMemory(&pctrl->bound, NULL) ;
  168.     /* WIN_copyClipは省略できない                   */
  169.     WIN_pushVisible(WIN_copyClip(pwclp), &pstackVisible) ;
  170.     WIN_pushClip(pwclp, &pstackClip) ;
  171.  
  172.     /*  ここでMM_SHOWなど描画処理を行う                */ 
  173.     MMI_SendMessage(judge_dialogId, MM_SHOW, 0);
  174.  
  175.     WIN_popClip(pstackClip) ; 
  176.     WIN_popVisible(pstackVisible) ; 
  177.     MG_PopOrigin(&dspOrigin) ; 
  178.  
  179.  
  180.     /*  原点を ban_windowId  のユーザ領域の左上に移動 */ 
  181.     MMI_SendMessage(ban_windowId, MM_GETHYPER, 1, &hyp) ;
  182.     MMI_SendMessage(ban_windowId, MM_GETUSER, 2, &oFr, &sFr) ; 
  183.     cFr.lupx = dspOrigin.x = hyp.fr.lupx + oFr.lupx ; 
  184.     cFr.lupy = dspOrigin.y = hyp.fr.lupy + oFr.lupy ; 
  185.     cFr.rdwx = cFr.lupx + oFr.rdwx -1 ; 
  186.     cFr.rdwy = cFr.lupy + oFr.rdwy -1 ; 
  187.     MG_PushOrigin(&dspOrigin, &origin) ;
  188.     pwclp = WIN_getClipMemory(&cFr, NULL) ; 
  189.     /* WIN_copyClipでクリップのコピーをビジブルの設定に利用する    */
  190.  
  191.     WIN_pushVisible(WIN_copyClip(pwclp), &pstackVisible) ;
  192.     WIN_pushClip(pwclp, &pstackClip) ;
  193.     /*  ここでWGB 関数などを使用して描画                  */ 
  194.     kifu_disp();
  195.     WIN_popClip(pstackClip) ; 
  196.     WIN_popVisible(pstackVisible) ; 
  197.     /*  原点を元に戻す                         */
  198.     MG_PopOrigin(&origin) ;
  199.     
  200.     return NOERR;
  201. }